import * as api from '../../api/common';
import area from './area.js';

Page({
  data: {
    statusBarHeight: 0,
    height: 0,
    timeOptions: ['全部时间', '近一周', '近三个月', '近半年'], // 时间选项列表
    timeIndex: 0, // 当前选中的时间索引
    typeOptions: ['全部票品', '普通票', 'VIP票', 'SVIP票', '优惠/特殊票'], // 票品类型
    typeIndex: 0, // 当前选中的票品类型索引
    multiIndex: [0, 0],
    selectedCity: '常州市', // 当前选择的城市
    multiArray: [],
    imgUrls: [],
    interval: 5000,
    duration: 1000,
    circular: true,
    leftMargin: '100rpx',
    rightMargin: '100rpx',
    currentIndex: 0,
    tickets: [], // 票务列表数据
    pageNum: 1, // 当前加载的页数
    pageSize: 10, // 每页加载的条目数
    loadingMore: false, // 加载更多数据的标志位
    noMore: false, // 是否已加载全部数据
  },
  onLoad() {
    // 检查用户信息是否存在
    const userInfo = tt.getStorageSync('info');
    // 如果用户信息不存在或者没有用户ID，则跳转到登录页面
    if (!userInfo || !userInfo.id) {
      tt.redirectTo({
        url: '../loginByAccount/index'
      });
    } else {
      const sysInfo = tt.getMenuButtonBoundingClientRect();
      this.setData({
        height: sysInfo.height,
        statusBarHeight: sysInfo.top,
      });
      this.initArea();
      this.initBanner();
      // this.loadData();
    }
  },
  onShow() {
    this.loadData();
  },
  async initBanner() {
    try {
      const response = await api.bannerList();
      if(response.data && response.data.length > 0){
        response.data.forEach(v=>{
          v.img = `${api.baseUrl}/${v.img}`
        })
      }
      this.setData({
        imgUrls: response.data
      })
    } catch (error) { 
      console.error('获取轮播失败:', error);
    }
  },
  // 加载数据的核心方法
  async loadData(pageNum = 1) {
    try {
      const {
        name,
        selectedCity,
        timeIndex,
        typeIndex,
        pageSize
      } = this.data;

      const response = await api.ticketList({
        name: name, // 票名筛选条件
        city: selectedCity, // 城市筛选条件，根据用户选择的城市进行筛选
        range: timeIndex, // 时间范围筛选条件，根据用户选择的时间范围进行筛选
        ticketType: typeIndex, // 票品筛选条件，根据用户选择的票品类型进行筛选
        pageNum: pageNum, // 当前页数
        pageSize: pageSize, // 每页加载条目数
      });

      if(response.data.data && response.data.data.length > 0){
        response.data.data.forEach(v=>{
          v.img = `${api.baseUrl}/${v.img}`
        })
      }
      // 新加载的数据
      const newTickets = response.data.data;

      // 更新原有数据
      let updatedTickets = [];
      if (pageNum === 1) {
        // 首次加载或重新加载数据，替换现有数据
        updatedTickets = newTickets;
      } else {
        // 加载更多数据，追加到现有数据末尾
        updatedTickets = [...this.data.tickets, ...newTickets];
      }

      // 更新页面数据
      this.setData({
        tickets: updatedTickets,
        pageNum: pageNum, // 更新页码为加载后的页码
        loading: false, // 加载完成，设置 loading 为 false
        noMore: newTickets.length < pageSize, // 判断是否已加载全部数据
      });
    } catch (error) {
      console.error('加载数据失败:', error);
      this.setData({
        loading: false, // 加载失败，设置 loading 为 false
      });
    }
  },
  // 上拉加载更多数据
  loadMoreData() {
    // 如果正在加载中或已加载全部数据，则直接返回
    if (this.data.loadingMore || this.data.noMore) {
      return;
    }

    // 开始加载更多数据，设置 loading 为 true
    this.setData({
      loading: true,
    });

    // 更新页码
    const nextPageNum = this.data.pageNum + 1;

    // 调用加载数据的方法
    this.loadData(nextPageNum);
  },
  // 处理搜索输入事件
  onSearchInput(event) {
    const name = event.detail.value;
    this.setData({
      name
    })
  },
  // 处理搜索确认事件
  onSearchConfirm() {
    this.loadData();
  },
  // 选择时间
  selectTime(e) {
    const index = e.detail.value;
    this.setData({
      timeIndex: index
    });
    this.loadData();
  },
  // 选择票品类型
  selectType(e) {
    const index = e.detail.value;
    this.setData({
      typeIndex: index
    }); 
    this.loadData(); 
  },
  handleChange: function (e) {
    this.setData({
      currentIndex: e.detail.current
    })
  },
  toDetail(e) {
    const id = e.currentTarget.dataset.id;
    tt.navigateTo({
      url: `../detail/index?id=${id}`,
      success: (res) => {
        console.log('导航成功', res);
      },
      fail: (res) => {
        console.log('导航失败', res);
      },
    });
  },
  // 处理列改变事件
  bindMultiPickerColumnChange: function (e) {
    const column = e.detail.column;
    const value = e.detail.value;

    // 更新 multiIndex
    let multiIndex = this.data.multiIndex;
    multiIndex[column] = value;

    // 如果改变的是第一列（省份列）
    if (column === 0) {
      const selectedProvinceName = this.data.multiArray[0][value];
      const cities = this.getCitiesByProvince(selectedProvinceName);

      // 更新第二列数据（市级数据）
      let multiArray = this.data.multiArray;
      multiArray[1] = cities;
      multiIndex[1] = 0; // 重置第二列的选择索引为第一个城市

      // 更新数据
      this.setData({
        multiArray: multiArray,
        multiIndex: multiIndex
      });
    }
  },

  // 处理值改变事件
  bindMultiPickerChange: function (e) {
    const value = e.detail.value;
    // 获取选择的城市
    const selectedCity = this.data.multiArray[1][value[1]];

    // 更新 multiIndex
    this.setData({
      multiIndex: value,
      selectedCity: selectedCity // 将选择的城市存储到页面数据中
    });
    // 重新加载票务列表数据，根据选择的城市进行筛选
    this.loadData();
  },
  // 定义一个函数，根据省份名称获取对应的市的名称数组
  getCitiesByProvince: function (provinceName) {
    const provinceItem = area.objectMultiArray.find(item => item.regname === provinceName && item.parid === '1');
    if (!provinceItem) {
      return []; // 如果找不到对应省份，返回空数组
    }

    // 获取该省份下的所有市级单位
    return area.objectMultiArray
      .filter(item => item.parid === provinceItem.regid && item.regtype === '2')
      .map(item => item.regname); // 提取市的名称
  },
  initArea: function () {
    // 获取所有省份名称
    let provinces = area.objectMultiArray
      .filter(item => item.parid === '1')
      .map(item => item.regname);
    // 初始化 multiArray，第二列默认显示江苏省的市级数据
    const multiArray = [
      provinces, // 第一列为所有省份名称
      area.objectMultiArray
      .filter(item => item.parid === '16')
      .map(item => item.regname) // 第二列初始为江苏省的市级数据
    ];

    // 找到江苏省在省份列表中的索引
    let jiangsuIndex = multiArray[0].findIndex(province => province === '江苏省');

    // 找到常州市在江苏省市级数据中的索引
    let changzhouIndex = multiArray[1].findIndex(city => city === '常州市');

    // 设置初始值为江苏省和常州市
    this.setData({
      multiArray: multiArray,
      multiIndex: [jiangsuIndex, changzhouIndex] // 默认选择江苏省和常州市
    });
  }
});